home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / SLAX 6.0.8 / slax-6.0.8.iso / slax / base / 006-devel.lzm / usr / include / KoOasisStyles.h < prev    next >
Encoding:
C/C++ Source or Header  |  2007-05-30  |  7.6 KB  |  166 lines

  1. /* This file is part of the KDE project
  2.    Copyright (C) 2004-2006 David Faure <faure@kde.org>
  3.  
  4.    This library is free software; you can redistribute it and/or
  5.    modify it under the terms of the GNU Library General Public
  6.    License version 2 as published by the Free Software Foundation.
  7.  
  8.    This library is distributed in the hope that it will be useful,
  9.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  11.    Library General Public License for more details.
  12.  
  13.    You should have received a copy of the GNU Library General Public License
  14.    along with this library; see the file COPYING.LIB.  If not, write to
  15.    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
  16.  * Boston, MA 02110-1301, USA.
  17. */
  18.  
  19. #ifndef KOOASISSTYLES_H
  20. #define KOOASISSTYLES_H
  21.  
  22. #include <qdom.h>
  23. #include <qdict.h>
  24. #include <qvaluevector.h>
  25. #include <qmap.h>
  26. #include <koffice_export.h>
  27.  
  28. class KoGenStyles;
  29. class KoXmlWriter;
  30. class QBrush;
  31. class KoGenStyle;
  32. class KoStyleStack;
  33.  
  34. /**
  35.  * Repository of styles used during loading of OASIS/OOo file
  36.  */
  37. class KOFFICECORE_EXPORT KoOasisStyles
  38. {
  39. public:
  40.     KoOasisStyles();
  41.     ~KoOasisStyles();
  42.  
  43.     /// Look into @p doc for styles and remember them
  44.     /// @param doc document to look into
  45.     /// @param stylesDotXml true when loading styles.xml, false otherwise
  46.     void createStyleMap( const QDomDocument& doc, bool stylesDotXml );
  47.  
  48.     /**
  49.      * Look up a style by name.
  50.      *  This method can find styles defined by the tags "style:page-layout",
  51.      *   "style:presentation-page-layout", or "style:font-decl".
  52.      * Do NOT use this method for style:style styles.
  53.      *
  54.      * @param name the style name
  55.      * @return the dom element representing the style, or QString::null if it wasn't found.
  56.      */
  57.     const QDomElement* findStyle( const QString& name ) const;
  58.  
  59.     /**
  60.      * Look up a style:style by name.
  61.      * @param name the style name
  62.      * @param family the style family (for a style:style, use 0 otherwise)
  63.      * @return the dom element representing the style, or QString::null if it wasn't found.
  64.      */
  65.     const QDomElement* findStyle( const QString& name, const QString& family ) const;
  66.  
  67.     /// Similar to findStyle but for auto-styles in styles.xml only.
  68.     const QDomElement* findStyleAutoStyle( const QString& name, const QString& family ) const;
  69.  
  70.     /// @return the style:styles that are "user styles", i.e. those from office:styles
  71.     /// findStyle() is used for lookup. userStyles() is used to load all user styles upfront.
  72.     QValueVector<QDomElement> userStyles() const;
  73.  
  74.     /// @return the default style for a given family ("graphic","paragraph","table" etc.)
  75.     /// Returns 0 if no default style for this family is available
  76.     const QDomElement* defaultStyle( const QString& family ) const;
  77.  
  78.     /// @return the office:style element
  79.     const QDomElement& officeStyle() const { return m_officeStyle; }
  80.  
  81.     /// @return all list styles ("text:list-style" elements), hashed by name
  82.     const QDict<QDomElement>& listStyles() const { return m_listStyles; }
  83.  
  84.     /// @return master pages ("style:master-page" elements), hashed by name
  85.     const QDict<QDomElement>& masterPages() const { return m_masterPages; }
  86.  
  87.     /// @return draw styles, hashed by name
  88.     const QDict<QDomElement>& drawStyles() const { return m_drawStyles; }
  89.  
  90.     /// @return all styles ("style:style" elements) for a given family, hashed by name
  91.     const QDict<QDomElement>& styles(const QString& family) const;
  92.  
  93.     /// Prefix and suffix are always included into formatStr. Having them as separate fields simply
  94.     /// allows to extract them from formatStr, to display them in separate widgets.
  95.     struct NumericStyleFormat
  96.     {
  97.         QString formatStr;
  98.         QString prefix;
  99.         QString suffix;
  100.         enum { Number, Scientific, Fraction, Currency, Percentage,
  101.                Date, Time, Boolean, Text } type;
  102.         int precision;
  103.         QString currencySymbol;
  104.     };
  105.  
  106.     typedef QMap<QString, NumericStyleFormat> DataFormatsMap;
  107.     /// Value (date/time/number...) formats found while parsing styles. Used e.g. for fields.
  108.     /// Key: format name. Value:
  109.     const DataFormatsMap& dataFormats() const { return m_dataFormats; }
  110.  
  111.     static QString saveOasisDateStyle( KoGenStyles &mainStyles, const QString & _format, bool klocaleFormat,
  112.                                        const QString &_prefix = QString::null , const QString &_suffix= QString::null );
  113.     static QString saveOasisTimeStyle( KoGenStyles &mainStyles, const QString & _format, bool klocaleFormat,
  114.                                        const QString &_prefix = QString::null , const QString &_suffix= QString::null );
  115.     static QString saveOasisFractionStyle( KoGenStyles &mainStyles, const QString & _format,
  116.                                            const QString &_prefix = QString::null , const QString &_suffix= QString::null );
  117.     static QString saveOasisScientificStyle( KoGenStyles &mainStyles, const QString & _format,
  118.                                              const QString &_prefix = QString::null , const QString &_suffix= QString::null );
  119.     static QString saveOasisNumberStyle( KoGenStyles &mainStyles, const QString & _format,
  120.                                          const QString &_prefix = QString::null , const QString &_suffix= QString::null );
  121.     static QString saveOasisPercentageStyle( KoGenStyles &mainStyles, const QString & _format,
  122.                                              const QString &_prefix = QString::null , const QString &_suffix= QString::null );
  123.     static QString saveOasisCurrencyStyle( KoGenStyles &mainStyles, const QString & _format, const QString &symbol,
  124.                                            const QString &_prefix = QString::null , const QString &_suffix= QString::null );
  125.     static QString saveOasisTextStyle( KoGenStyles &mainStyles, const QString & _format,
  126.                                        const QString &_prefix = QString::null , const QString &_suffix= QString::null );
  127.  
  128.     static void saveOasisFillStyle( KoGenStyle &styleFill, KoGenStyles& mainStyles, const QBrush & brush );
  129.     static QString saveOasisHatchStyle( KoGenStyles& mainStyles, const QBrush &brush );
  130.  
  131.     static QBrush loadOasisFillStyle( const KoStyleStack &styleStack, const QString & fill,  const KoOasisStyles & oasisStyles );
  132.  
  133. private:
  134.     /// Add styles to styles map
  135.     void insertStyles( const QDomElement& styles, bool styleAutoStyles = false );
  136.  
  137. private:
  138.     void insertOfficeStyles( const QDomElement& styles );
  139.     void insertStyle( const QDomElement& style, bool styleAutoStyles );
  140.     void importDataStyle( const QDomElement& parent );
  141.     static bool saveOasisTimeFormat( KoXmlWriter &elementWriter, QString & format, QString & text, bool &antislash );
  142.     static void parseOasisDateKlocale(KoXmlWriter &elementWriter, QString & format, QString & text );
  143.     static bool saveOasisKlocaleTimeFormat( KoXmlWriter &elementWriter, QString & format, QString & text );
  144.     static void parseOasisTimeKlocale(KoXmlWriter &elementWriter, QString & format, QString & text );
  145.     static void addKofficeNumericStyleExtension( KoXmlWriter & elementWriter, const QString &_suffix, const QString &_prefix );
  146.  
  147.     KoOasisStyles( const KoOasisStyles & ); // forbidden
  148.     KoOasisStyles& operator=( const KoOasisStyles & ); // forbidden
  149.  
  150. private:
  151.     QDict<QDomElement>   m_styles; // page-layout, font-decl etc.
  152.     QDict<QDomElement>   m_defaultStyle;
  153.     QDomElement m_officeStyle;
  154.  
  155.     QDict<QDomElement>   m_masterPages;
  156.     QDict<QDomElement>   m_listStyles;
  157.  
  158.     QDict<QDomElement>   m_drawStyles;
  159.     DataFormatsMap m_dataFormats;
  160.  
  161.     class Private;
  162.     Private * const d;
  163. };
  164.  
  165. #endif /* KOOASISSTYLES_H */
  166.